home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / macros / lollipop / lolplain.tex < prev    next >
Text File  |  1993-01-28  |  42KB  |  1,208 lines

  1. % This is LOLPLAIN.TEX, the version of plain.tex adapted to the
  2. % Lollipop format of Victor Eijkhout. copyright 1991/92.
  3.  
  4. \catcode`\{=1 % left brace is begin-group character
  5. \catcode`\}=2 % right brace is end-group character
  6. \catcode`\$=3 % dollar sign is math shift
  7. \catcode`\&=4 % ampersand is alignment tab
  8. \catcode`\#=6 % hash mark is macro parameter character
  9. \catcode`\^=7 \catcode`\^^K=7 % circumflex and uparrow are for superscripts
  10. \catcode`\_=8 \catcode`\^^A=8 % underline and downarrow are for subscripts
  11. \catcode`\^^I=10 % ascii tab is a blank space
  12. \chardef\active=13 \catcode`\~=\active % tilde is active
  13. \chardef\ignored=9 \chardef\other=12
  14. \catcode`\^^L=\active \outer\def^^L{\par} % ascii form-feed is "\outer\par"
  15.  
  16. % We had to define the \catcodes right away, before the message line,
  17. % since \message uses the { and } characters.
  18. % When INITEX (the TeX initializer) starts up,
  19. % it has defined the following \catcode values:
  20. % \catcode`\^^@=9 % ascii null is ignored
  21. % \catcode`\^^M=5 % ascii return is end-line
  22. % \catcode`\\=0 % backslash is TeX escape character
  23. % \catcode`\%=14 % percent sign is comment character
  24. % \catcode`\ =10 % ascii space is blank space
  25. % \catcode`\^^?=15 % ascii delete is invalid
  26. % \catcode`\A=11 ... \catcode`\Z=11 % uppercase letters
  27. % \catcode`\a=11 ... \catcode`\z=11 % lowercase letters
  28. % all others are type 12 (other)
  29.  
  30. % INITEX sets up \mathcode x=x, for x=0..127, except that
  31. % \mathcode x=x+"7100, for x = `A to `Z and `a to `z;
  32. % \mathcode x=x+"7000, for x = `0 to `9.
  33. % The following changes define internal codes as recommended
  34. % in Appendix C of The TeXbook:
  35. \mathcode`\^^@="2201 % \cdot
  36. \mathcode`\^^A="3223 % \downarrow
  37. \mathcode`\^^B="010B % \alpha
  38. \mathcode`\^^C="010C % \beta
  39. \mathcode`\^^D="225E % \land
  40. \mathcode`\^^E="023A % \lnot
  41. \mathcode`\^^F="3232 % \in
  42. \mathcode`\^^G="0119 % \pi
  43. \mathcode`\^^H="0115 % \lambda
  44. \mathcode`\^^I="010D % \gamma
  45. \mathcode`\^^J="010E % \delta
  46. \mathcode`\^^K="3222 % \uparrow
  47. \mathcode`\^^L="2206 % \pm
  48. \mathcode`\^^M="2208 % \oplus
  49. \mathcode`\^^N="0231 % \infty
  50. \mathcode`\^^O="0140 % \partial
  51. \mathcode`\^^P="321A % \subset
  52. \mathcode`\^^Q="321B % \supset
  53. \mathcode`\^^R="225C % \cap
  54. \mathcode`\^^S="225B % \cup
  55. \mathcode`\^^T="0238 % \forall
  56. \mathcode`\^^U="0239 % \exists
  57. \mathcode`\^^V="220A % \otimes
  58. \mathcode`\^^W="3224 % \leftrightarrow
  59. \mathcode`\^^X="3220 % \leftarrow
  60. \mathcode`\^^Y="3221 % \rightarrow
  61. \mathcode`\^^Z="8000 % \ne
  62. \mathcode`\^^[="2205 % \diamond
  63. \mathcode`\^^\="3214 % \le
  64. \mathcode`\^^]="3215 % \ge
  65. \mathcode`\^^^="3211 % \equiv
  66. \mathcode`\^^_="225F % \lor
  67. \mathcode`\ ="8000 % \space
  68. \mathcode`\!="5021
  69. \mathcode`\'="8000 % ^\prime
  70. \mathcode`\(="4028
  71. \mathcode`\)="5029
  72. \mathcode`\*="2203 % \ast
  73. \mathcode`\+="202B
  74. \mathcode`\,="613B
  75. \mathcode`\-="2200
  76. \mathcode`\.="013A
  77. \mathcode`\/="013D
  78. \mathcode`\:="303A
  79. \mathcode`\;="603B
  80. \mathcode`\<="313C
  81. \mathcode`\=="303D
  82. \mathcode`\>="313E
  83. \mathcode`\?="503F
  84. \mathcode`\[="405B
  85. \mathcode`\\="026E % \backslash
  86. \mathcode`\]="505D
  87. \mathcode`\_="8000 % \_
  88. \mathcode`\{="4266
  89. \mathcode`\|="026A
  90. \mathcode`\}="5267
  91. \mathcode`\^^?="1273 % \smallint
  92.  
  93. % INITEX sets \uccode`x=`X and \uccode `X=`X for all letters x,
  94. % and \lccode`x=`x, \lccode`X=`x; all other values are zero.
  95. % No changes to those tables are needed in plain TeX format.
  96.  
  97. % INITEX sets \sfcode x=1000 for all x, except that \sfcode`X=999
  98. % for uppercase letters. The following changes are needed:
  99. \sfcode`\)=0 \sfcode`\'=0 \sfcode`\]=0
  100. % The \nonfrenchspacing macro will make further changes to \sfcode values.
  101.  
  102. % Finally, INITEX sets all \delcode values to -1, except \delcode`.=0
  103. \delcode`\(="028300
  104. \delcode`\)="029301
  105. \delcode`\[="05B302
  106. \delcode`\]="05D303
  107. \delcode`\<="26830A
  108. \delcode`\>="26930B
  109. \delcode`\/="02F30E
  110. \delcode`\|="26A30C
  111. \delcode`\\="26E30F
  112. % N.B. { and } should NOT get delcodes; otherwise parameter grouping fails!
  113.  
  114. % To make the plain macros more efficient in time and space,
  115. % several constant values are declared here as control sequences.
  116. % If they were changed, anything could happen; so they are private symbols.
  117. \chardef\@ne=1
  118. \chardef\tw@=2
  119. \chardef\thr@@=3
  120. \chardef\sixt@@n=16
  121. \chardef\@cclv=255
  122. \mathchardef\@cclvi=256
  123. \mathchardef\@m=1000
  124. \mathchardef\@M=10000
  125. \mathchardef\@MM=20000
  126.  
  127. % Allocation of registers
  128.  
  129. % Here are macros for the automatic allocation of \count, \box, \dimen,
  130. % \skip, \muskip, and \toks registers, as well as \read and \write
  131. % stream numbers, \fam codes, and \insert numbers.
  132.  
  133. % When a register is used only temporarily, it need not be allocated;
  134. % grouping can be used, making the value previously in the register return
  135. % after the close of the group.  The main use of these macros is for
  136. % registers that are defined by one macro and used by others, possibly at
  137. % different nesting levels.  All such registers should be defined through
  138. % these macros; otherwise conflicts may occur, especially when two or more
  139. % more macro packages are being used at once.
  140.  
  141. % The following counters are reserved:
  142. %   0 to 9  page numbering
  143. %       10  count allocation
  144. %       11  dimen allocation
  145. %       12  skip allocation
  146. %       13  muskip allocation
  147. %       14  box allocation
  148. %       15  toks allocation
  149. %       16  read file allocation
  150. %       17  write file allocation
  151. %       18  math family allocation
  152. %       19  insert allocation
  153. %       20  the most recently allocated number
  154. %       21  constant -1
  155. % New counters are allocated starting with 22, 23, etc.  Other registers are
  156. % allocated starting with 10.  This leaves 0 through 9 for the user to play
  157. % with safely, except that counts 0 to 9 are considered to be the page and
  158. % subpage numbers (since they are displayed during output). In this scheme,
  159. % \count 10 always contains the number of the highest-numbered counter that
  160. % has been allocated, \count 14 the highest-numbered box, etc.
  161. % Inserts are given numbers 254, 253, etc., since they require a \count,
  162. % \dimen, \skip, and \box all with the same number; \count 19 contains the
  163. % lowest-numbered insert that has been allocated. Of course, \box255 is
  164. % reserved for \output; \count255, \dimen255, and \skip255 can be used freely.
  165.  
  166. % It is recommends that macro designers always use
  167. % \global assignments with respect to registers numbered 1, 3, 5, 7, 9, and
  168. % always non-\global assignments with respect to registers 0, 2, 4, 6, 8, 255.
  169. % This will prevent ``save stack buildup'' that might otherwise occur.
  170.  
  171. \count10=22 % allocates \count registers 22, 23, ...
  172. \count11=9 % allocates \dimen registers 10, 11, ...
  173. \count12=9 % allocates \skip registers 10, 11, ...
  174. \count13=9 % allocates \muskip registers 10, 11, ...
  175. \count14=9 % allocates \box registers 10, 11, ...
  176. \count15=9 % allocates \toks registers 10, 11, ...
  177. \count16=-1 % allocates input streams 0, 1, ...
  178. \count17=-1 % allocates output streams 0, 1, ...
  179. \count18=3 % allocates math families 4, 5, ...
  180. \count19=0 % allocates \language codes 1, 2, ...
  181. \count20=255 % allocates insertions 254, 253, ...
  182. \countdef\insc@unt=20 % the insertion counter
  183. \countdef\allocationnumber=21 % the most recent allocation
  184. \countdef\m@ne=22 \m@ne=-1 % a handy constant
  185. \def\wlog{\immediate\write\m@ne} % write on log file (only)
  186.  
  187. % Here are abbreviations for the names of scratch registers
  188. % that don't need to be allocated.
  189.  
  190. \countdef\count@=255
  191. \dimendef\dimen@=0
  192. \dimendef\dimen@i=1 % global only
  193. \dimendef\dimen@ii=2
  194. \skipdef\skip@=0
  195. \toksdef\toks@=0
  196.  
  197. % Now, we define \newcount, \newbox, etc. so that you can say \newcount\foo
  198. % and \foo will be defined (with \countdef) to be the next counter.
  199. % To find out which counter \foo is, you can look at \allocationnumber.
  200. % Since there's no \boxdef command, \chardef is used to define a \newbox,
  201. % \newinsert, \newfam, and so on.
  202.  
  203. % Be able to save the allocation state. Write streams are
  204. % excepted from this.
  205. \def\SaveAlloc{\xdef\RestoreAlloc
  206.    {\begingroup\globaldefs=1
  207.     \count10=\the\count10 \count11=\the\count11 \count12=\the\count12
  208.     \count13=\the\count13 \count14=\the\count14 \count15=\the\count15
  209.     \count16=\the\count16 %\count17=\the\count17 
  210.     \count18=\the\count18
  211.     \endgroup}} 
  212. %LP no longer outer; switch off trace in these macros
  213. \def\@@newcount{\alloc@0\count\countdef\insc@unt}
  214. \def\@@newdimen{\alloc@1\dimen\dimendef\insc@unt}
  215. \def\@@newskip{\alloc@2\skip\skipdef\insc@unt}
  216. \def\@@newmuskip{\alloc@3\muskip\muskipdef\@cclvi}
  217. \def\@@newbox{\alloc@4\box\chardef\insc@unt}
  218. \let\newtoks\relax
  219. \let\@@newtoks=\relax % we do this to allow plain.tex to be read in twice
  220. \def\@@newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}}
  221. \def\@@newtoks{\alloc@5\toks\toksdef\@cclvi}
  222. \def\@@newread{\alloc@6\read\chardef\sixt@@n}
  223. \def\@@newwrite{\alloc@7\write\chardef\sixt@@n}
  224. \def\@@newfam{\alloc@8\fam\chardef\sixt@@n}
  225. \def\@@newlanguage{\alloc@9\language\chardef\@cclvi}
  226.  
  227. \def\newcount#1{\@TM@s\@@newcount#1\@TM@r}
  228. \def\newdimen#1{\@TM@s\@@newdimen#1\@TM@r}
  229. \def\newskip#1{\@TM@s\@@newskip#1\@TM@r}
  230. \def\newmuskip#1{\@TM@s\@@newmuskip#1\@TM@r}
  231. \def\newbox#1{\@TM@s\@@newbox#1\@TM@r}
  232. \let\newtoks=\relax % we do this to allow plain.tex to be read in twice
  233. \def\newhelp#1#2{\@TM@s\@@newhelp#1#2\@TM@r}
  234. \def\newtoks#1{\@TM@s\@@newtoks#1\@TM@r}
  235. \def\newread#1{\@TM@s\@@newread#1\@TM@r}
  236. \def\newwrite#1{\@TM@s\@@newwrite#1\@TM@r}
  237. \def\newfam#1{\@TM@s\@@newfam#1\@TM@r}
  238. \def\newlanguage#1{\@TM@s\@@newlanguage#1\@TM@r}
  239. \def\alloc@#1#2#3#4#5{\global\advance\count1#1by\@ne
  240.   \ch@ck#1#4#2% make sure there's still room
  241.   \allocationnumber=\count1#1%
  242.   \global#3#5=\allocationnumber
  243.   \wlog{\string#5=\string#2\the\allocationnumber}}
  244. \def\newinsert#1{\global\advance\insc@unt by\m@ne
  245.   \ch@ck0\insc@unt\count
  246.   \ch@ck1\insc@unt\dimen
  247.   \ch@ck2\insc@unt\skip
  248.   \ch@ck4\insc@unt\box
  249.   \allocationnumber=\insc@unt
  250.   \global\chardef#1=\allocationnumber
  251.   \wlog{\string#1=\string\insert\the\allocationnumber}}
  252. \def\ch@ck#1#2#3{\ifnum\count1#1<#2%
  253.   \else\errmessage{No room for a new #3}\fi}
  254.  
  255. %% trace
  256. {\def\newcount{\alloc@0\count\countdef\insc@unt}
  257.  \def\newdimen{\alloc@1\dimen\dimendef\insc@unt}
  258. \newcount\@TM@c \newcount\@TC@c
  259. \newdimen\z@ \global\z@=0pt}
  260. \def\@TM@s{\@TC@c\tracingcommands \tracingcommands\z@
  261.            \@TM@c\tracingmacros \tracingmacros\z@
  262.            \relax}
  263. \def\@TM@r{\tracingmacros\@TM@c \tracingcommands\@TC@c}
  264. \let\x@TM@s\@TM@s \let\x@TM@r\@TM@r
  265.  
  266. % Here are some examples of allocation.
  267. \newdimen\maxdimen \maxdimen=16383.99999pt % the largest legal <dimen>
  268. \newskip\hideskip \hideskip=-1000pt plus 1fill % negative but can grow
  269. \newskip\centering \centering=0pt plus 1000pt minus 1000pt
  270. \newdimen\p@ \p@=1pt % this saves macro space and time
  271. %V \newdimen\z@ \z@=0pt % naar boven
  272. \newskip\z@skip \z@skip=0pt plus0pt minus0pt
  273. \newbox\voidb@x % permanently void box register
  274.  
  275. % And here's a different sort of allocation:
  276. % For example, \newif\iffoo creates \footrue, \foofalse to go with \iffoo.
  277. \def\newif#1{%\@TM@s 
  278.   \count@\escapechar \escapechar\m@ne
  279.   \expandafter\expandafter\expandafter
  280.    \xdef\@if#1{yes}{\let\noexpand#1=\noexpand\iftrue}%
  281.   \expandafter\expandafter\expandafter
  282.    \xdef\@if#1{true}{\let\noexpand#1=\noexpand\iftrue}%
  283.   \expandafter\expandafter\expandafter
  284.    \xdef\@if#1{no}{\let\noexpand#1=\noexpand\iffalse}%
  285.   \expandafter\expandafter\expandafter
  286.    \xdef\@if#1{false}{\let\noexpand#1=\noexpand\iffalse}%
  287.   \global\@if#1{no}% the condition starts out false
  288.   \escapechar\count@
  289. %  \@TM@r
  290. }
  291. \def\@if#1#2{\csname\expandafter\if@\string#1#2\endcsname}
  292. {\uccode`1=`i \uccode`2=`f \uppercase{\gdef\if@12{}}} % `if' is required
  293.  
  294.  
  295. % Assign initial values to TeX's parameters
  296.  
  297. % All of TeX's numeric parameters are listed here,
  298. % but the code is commented out if no special value needs to be set.
  299. % INITEX makes all parameters zero except where noted.
  300.  
  301. \pretolerance=100
  302. \tolerance=200 % INITEX sets this to 10000
  303. \hbadness=1000
  304. \vbadness=1000
  305. \linepenalty=10
  306. \hyphenpenalty=50
  307. \exhyphenpenalty=50
  308. \binoppenalty=700
  309. \relpenalty=500
  310. \clubpenalty=150
  311. \widowpenalty=150
  312. \displaywidowpenalty=50
  313. \brokenpenalty=100
  314. \predisplaypenalty=10000
  315. % \postdisplaypenalty=0
  316. % \interlinepenalty=0
  317. % \floatingpenalty=0, set during \insert
  318. % \outputpenalty=0, set before TeX enters \output
  319. \doublehyphendemerits=10000
  320. \finalhyphendemerits=5000
  321. \adjdemerits=10000
  322. % \looseness=0, cleared by TeX after each paragraph
  323. % \pausing=0
  324. % \holdinginserts=0
  325. % \tracingonline=0
  326. % \tracingmacros=0
  327. % \tracingstats=0
  328. % \tracingparagraphs=0
  329. % \tracingpages=0
  330. % \tracingoutput=0
  331. \tracinglostchars=1
  332. % \tracingcommands=0
  333. % \tracingrestores=0
  334. % \language=0
  335. \uchyph=1
  336. % \lefthyphenmin=2 \righthyphenmin=3 set below
  337. % \globaldefs=0
  338. % \maxdeadcycles=25 % INITEX does this
  339. % \hangafter=1 % INITEX does this, also TeX after each paragraph
  340. % \fam=0
  341. % \mag=1000 % INITEX does this
  342. % \escapechar=`\\ % INITEX does this
  343. \defaulthyphenchar=`\-
  344. \defaultskewchar=-1
  345. % \endlinechar=`\^^M % INITEX does this
  346. \newlinechar=-1
  347. \delimiterfactor=901
  348. % \time=now % TeX does this at beginning of job
  349. % \day=now % TeX does this at beginning of job
  350. % \month=now % TeX does this at beginning of job
  351. % \year=now % TeX does this at beginning of job
  352. \showboxbreadth=5
  353. \showboxdepth=3
  354. \errorcontextlines=5
  355.  
  356. \hfuzz=0.1pt
  357. \vfuzz=0.1pt
  358. \overfullrule=5pt
  359. \hsize=6.5in
  360. \vsize=8.9in
  361. \maxdepth=4pt
  362. \splitmaxdepth=\maxdimen
  363. \boxmaxdepth=\maxdimen
  364. % \lineskiplimit=0pt, changed by \normalbaselines
  365. \delimitershortfall=5pt
  366. \nulldelimiterspace=1.2pt
  367. \scriptspace=0.5pt
  368. % \mathsurround=0pt
  369. % \predisplaysize=0pt, set before TeX enters $$
  370. % \displaywidth=0pt, set before TeX enters $$
  371. % \displayindent=0pt, set before TeX enters $$
  372. \parindent=20pt
  373. % \hangindent=0pt, zeroed by TeX after each paragraph
  374. % \hoffset=0pt
  375. % \voffset=0pt
  376.  
  377. % \baselineskip=0pt, changed by \normalbaselines
  378. % \lineskip=0pt, changed by \normalbaselines
  379. \parskip=0pt plus 1pt
  380. \abovedisplayskip=12pt plus 3pt minus 9pt
  381. \abovedisplayshortskip=0pt plus 3pt
  382. \belowdisplayskip=12pt plus 3pt minus 9pt
  383. \belowdisplayshortskip=7pt plus 3pt minus 4pt
  384. % \leftskip=0pt
  385. % \rightskip=0pt
  386. \topskip=10pt
  387. \splittopskip=10pt
  388. % \tabskip=0pt
  389. % \spaceskip=0pt
  390. % \xspaceskip=0pt
  391. \parfillskip=0pt plus 1fil
  392.  
  393. \thinmuskip=3mu
  394. \medmuskip=4mu plus 2mu minus 4mu
  395. \thickmuskip=5mu plus 5mu
  396.  
  397. % We also define special registers that function like parameters:
  398. \newskip\smallskipamount \smallskipamount=3pt plus 1pt minus 1pt
  399. \newskip\medskipamount \medskipamount=6pt plus 2pt minus 2pt
  400. \newskip\bigskipamount \bigskipamount=12pt plus 4pt minus 4pt
  401. \newskip\normalbaselineskip \normalbaselineskip=12pt
  402. \newskip\normallineskip \normallineskip=1pt
  403. \newdimen\normallineskiplimit \normallineskiplimit=0pt
  404. \newdimen\jot \jot=3pt
  405. \newcount\interdisplaylinepenalty \interdisplaylinepenalty=100
  406. \newcount\interfootnotelinepenalty \interfootnotelinepenalty=100
  407.  
  408. % Definitions for preloaded fonts
  409.  
  410. \def\magstephalf{1095 }
  411. \def\magstep#1{\ifcase#1 \@m\or 1200\or 1440\or 1728\or 2074\or 2488\fi\relax}
  412.  
  413. % Fonts assigned to \preloaded are not part of "plain TeX",
  414. % but they are preloaded so that other format packages can use them.
  415. % For example, if another set of macros says "\font\ninerm=cmr9",
  416. % TeX will not have to reload the font metric information for cmr9.
  417.  
  418. %\font\tenrm=cmr10 % roman text
  419. %\font\preloaded=cmr9
  420. %\font\preloaded=cmr8
  421. %\font\sevenrm=cmr7
  422. %\font\preloaded=cmr6
  423. %\font\fiverm=cmr5
  424.  
  425. %\font\teni=cmmi10 % math italic %LP in fonts.tex
  426. %\font\preloaded=cmmi9
  427. %\font\preloaded=cmmi8
  428. %\font\seveni=cmmi7
  429. %\font\preloaded=cmmi6
  430. %\font\fivei=cmmi5
  431.  
  432. %\font\tensy=cmsy10 % math symbols %LP in fonts.tex
  433. %\font\preloaded=cmsy9
  434. %\font\preloaded=cmsy8
  435. %\font\sevensy=cmsy7
  436. %\font\preloaded=cmsy6
  437. %\font\fivesy=cmsy5
  438.  
  439. \font\tenex=cmex10 % This seems to be necessary here
  440.  
  441. %\font\preloaded=cmss10 % sans serif
  442. %\font\preloaded=cmssq8
  443.  
  444. %\font\preloaded=cmssi10 % sans serif italic
  445. %\font\preloaded=cmssqi8
  446.  
  447. %%\font\tenbf=cmbx10 % boldface extended
  448. %\font\preloaded=cmbx9
  449. %\font\preloaded=cmbx8
  450. %%\font\sevenbf=cmbx7
  451. %\font\preloaded=cmbx6
  452. %%\font\fivebf=cmbx5
  453.  
  454. \font\tentt=cmtt10 % typewriter
  455. %\font\preloaded=cmtt9
  456. %\font\preloaded=cmtt8
  457.  
  458. %\font\preloaded=cmsltt10 % slanted typewriter
  459.  
  460. %%\font\tensl=cmsl10 % slanted roman
  461. %\font\preloaded=cmsl9
  462. %\font\preloaded=cmsl8
  463.  
  464. %%\font\tenit=cmti10 % text italic
  465. %\font\preloaded=cmti9
  466. %\font\preloaded=cmti8
  467. %\font\preloaded=cmti7
  468.  
  469.  
  470. \let\preloaded=\undefined % preloaded fonts must be declared anew later.
  471.  
  472. %LP \skewchar moved to fonts.tex
  473. %\skewchar\teni='177 \skewchar\seveni='177 \skewchar\fivei='177
  474. %\skewchar\tensy='60 \skewchar\sevensy='60 \skewchar\fivesy='60
  475.  
  476. % Macros for setting ordinary text
  477.  
  478. \def\frenchspacing{\sfcode`\.\@m \sfcode`\?\@m \sfcode`\!\@m
  479.   \sfcode`\:\@m \sfcode`\;\@m \sfcode`\,\@m}
  480. \def\nonfrenchspacing{\sfcode`\.3000\sfcode`\?3000\sfcode`\!3000%
  481.   \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 }
  482.  
  483. \def\^^M{\ } % control <return> = control <space>
  484. \def\^^I{\ } % same for <tab>
  485.  
  486. \def\lq{`} \def\rq{'}
  487. \def\lbrack{[} \def\rbrack{]}
  488.  
  489. \let\endgraf=\par \let\endline=\cr
  490.  
  491. %LP In case we redefine \par, here is the original
  492. \let\@par=\par
  493.  
  494. \def\space{ }
  495. \def\empty{}
  496. \def\null{\hbox{}}
  497.  
  498. \let\bgroup={ \let\egroup=}
  499.  
  500. %%%%%%%%%%%%%%%% Catcode alterations
  501.  
  502. %%%% Dospecials
  503. %
  504. % (not counting ascii null, tab, linefeed, formfeed, return, delete)
  505. % Each symbol in the list is preceded by \do, which can be defined
  506. % if you want to do something to every item in the list.
  507. %
  508. % " added wrt plain definition
  509. %
  510. \def\dospecials{\@TM@s\do\ \do\\\do\{\do\}\do\$\do\&%
  511.   \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~\do\"\@TM@r}
  512.  
  513. % handy abbrevs
  514. %
  515. \def\makeother#1{\catcode`#1\other}
  516. \def\othercr{\makeother\^^M\relax}
  517. \def\normalcr{\catcode`\^^M=5\relax}
  518. \def\activecr{\catcode`\^^M\active}
  519. \def\noeol{\endlinechar\m@ne}\def\normaleol{\endlinechar`\^^M\relax}
  520. \def\noesc{\escapechar\m@ne}\def\normalesc{\escapechar`\\\relax}
  521.  
  522. % obeylines
  523. %
  524. % In \obeylines, we say `\let^^M=\par' instead of `\def^^M{\par}'
  525. % since this allows, for example, `\let\par=\cr \obeylines \halign{...'
  526. %
  527. % addition for empty lines
  528. %
  529. {\activecr % these lines must end with %
  530.   \gdef\obeylines{\activecr \def^^M{\@par\leavevmode\hbox{}}}%
  531.   \global\let^^M\@par} % this is in case ^^M appears in a \write
  532.  
  533. % obeyspaces
  534. %
  535. % plain: {\obeyspaces\global\let =\space}
  536. % extended for initial spaces on a line
  537. %
  538. {\catcode`\ \active
  539. \gdef\obeyspaces{\catcode`\ \active\let =\@ospace}}
  540. \def\@ospace{\leavevmode{} }
  541.  
  542. %LP minimal improvement over the original \loop macro
  543. \def\loop#1\repeat{\def\body{#1}\iterate}
  544. \def\iterate{\let\next\relax \body \let\next\iterate \fi \next}
  545. \let\repeat=\fi % this makes \loop...\if...\repeat skippable
  546.  
  547. \def\thinspace{\kern .16667em }
  548. \def\negthinspace{\kern-.16667em }
  549. \def\enspace{\kern.5em }
  550.  
  551. \def\enskip{\hskip.5em\relax}
  552. \def\quad{\hskip1em\relax}
  553. \def\qquad{\hskip2em\relax}
  554.  
  555. \def\smallskip{\vskip\smallskipamount}
  556. \def\medskip{\vskip\medskipamount}
  557. \def\bigskip{\vskip\bigskipamount}
  558.  
  559. \def\nointerlineskip{\prevdepth-1000\p@}
  560. \def\offinterlineskip{\baselineskip-1000\p@
  561.   \lineskip\z@ \lineskiplimit\maxdimen}
  562.  
  563. \def\topglue{\nointerlineskip\vglue-\topskip\vglue} % for top of page
  564. \def\vglue{\afterassignment\vgl@\skip@=}
  565. \def\vgl@{\par \dimen@\prevdepth \hrule height\z@
  566.   \nobreak\vskip\skip@ \prevdepth\dimen@}
  567. \def\hglue{\afterassignment\hgl@\skip@=}
  568. \def\hgl@{\leavevmode \count@\spacefactor \vrule width\z@
  569.   \nobreak\hskip\skip@ \spacefactor\count@}
  570.  
  571. \def~{\penalty\@M \ } % tie
  572. \def\slash{/\penalty\exhyphenpenalty} % a `/' that acts like a `-'
  573.  
  574. \def\break{\penalty-\@M}
  575. \def\nobreak{\penalty \@M}
  576. \def\allowbreak{\penalty \z@}
  577.  
  578. \def\filbreak{\par\vfil\penalty-200\vfilneg}
  579. \def\goodbreak{\par\penalty-500 }
  580. \def\eject{\par\break}
  581. \def\supereject{\par\penalty-\@MM}
  582.  
  583. \def\removelastskip{\ifdim\lastskip=\z@\else\vskip-\lastskip\fi}
  584. \def\smallbreak{\par\ifdim\lastskip<\smallskipamount
  585.   \removelastskip\penalty-50\smallskip\fi}
  586. \def\medbreak{\par\ifdim\lastskip<\medskipamount
  587.   \removelastskip\penalty-100\medskip\fi}
  588. \def\bigbreak{\par\ifdim\lastskip<\bigskipamount
  589.   \removelastskip\penalty-200\bigskip\fi}
  590.  
  591. \def\line{\hbox to\hsize}
  592. \def\leftline#1{\line{#1\hss}}
  593. \def\rightline#1{\line{\hss#1}}
  594. \def\centerline#1{\line{\hss#1\hss}}
  595.  
  596. \def\rlap#1{\hbox to\z@{#1\hss}}
  597. \def\llap#1{\hbox to\z@{\hss#1}}
  598.  
  599. \def\m@th{\mathsurround=\z@}
  600. \def\underbar#1{$\setbox\z@\hbox{#1}\dp\z@\z@
  601.   \m@th \underline{\box\z@}$}
  602.  
  603. \newbox\strutbox
  604. \setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width\z@}
  605. \def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}
  606.  
  607. \def\hidewidth{\hskip\hideskip} % for alignment entries that can stick out
  608. \def\ialign{\everycr{}\tabskip\z@skip\halign} % initialized \halign
  609. \newcount\mscount
  610. \def\multispan#1{\omit \mscount#1
  611.   \loop\ifnum\mscount>\@ne \sp@n\repeat}
  612. \def\sp@n{\span\omit\advance\mscount\m@ne}
  613.  
  614. %LP We keep the old tabbing macros
  615. \newif\ifus@ \newif\if@cr
  616. \newbox\tabs \newbox\tabsyet \newbox\tabsdone
  617.  
  618. \def\cleartabs{\global\setbox\tabsyet\null \setbox\tabs\null}
  619. \def\settabs{\setbox\tabs\null \futurelet\next\sett@b}
  620. \let\+=\relax % in case this file is being read in twice
  621. \def\sett@b{\ifx\next\+\let\next\relax
  622.     \def\next{\afterassignment\s@tt@b\let\next}%
  623.   \else\let\next\s@tcols\fi\next}
  624. \def\s@tt@b{\let\next\relax\us@false\m@ketabbox}
  625. \def\tabalign{\us@true\m@ketabbox} % non-\outer version of \+
  626. \outer\def\+{\tabalign}
  627. \def\s@tcols#1\columns{\count@#1\dimen@\hsize
  628.   \loop\ifnum\count@>\z@ \@nother \repeat}
  629. \def\@nother{\dimen@ii\dimen@ \divide\dimen@ii\count@
  630.   \setbox\tabs\hbox{\hbox to\dimen@ii{}\unhbox\tabs}%
  631.   \advance\dimen@-\dimen@ii \advance\count@\m@ne}
  632.  
  633. \def\m@ketabbox{\begingroup
  634.   \global\setbox\tabsyet\copy\tabs
  635.   \global\setbox\tabsdone\null
  636.   \def\cr{\@crtrue\crcr\egroup\egroup
  637.     \ifus@\unvbox\z@\lastbox\fi\endgroup
  638.     \setbox\tabs\hbox{\unhbox\tabsyet\unhbox\tabsdone}}%
  639.   \setbox\z@\vbox\bgroup\@crfalse
  640.     \ialign\bgroup&\t@bbox##\t@bb@x\crcr}
  641.  
  642. \def\t@bbox{\setbox\z@\hbox\bgroup}
  643. \def\t@bb@x{\if@cr\egroup % now \box\z@ holds the column
  644.   \else\hss\egroup \global\setbox\tabsyet\hbox{\unhbox\tabsyet
  645.       \global\setbox\@ne\lastbox}% now \box\@ne holds its size
  646.     \ifvoid\@ne\global\setbox\@ne\hbox to\wd\z@{}%
  647.     \else\setbox\z@\hbox to\wd\@ne{\unhbox\z@}\fi
  648.     \global\setbox\tabsdone\hbox{\box\@ne\unhbox\tabsdone}\fi
  649.   \box\z@}
  650.  
  651. \chardef\%=`\%
  652. \chardef\&=`\&
  653. \chardef\#=`\#
  654. \chardef\$=`\$
  655. \chardef\ss="19
  656. \chardef\ae="1A
  657. \chardef\oe="1B
  658. \chardef\o="1C
  659. \chardef\AE="1D
  660. \chardef\OE="1E
  661. \chardef\O="1F
  662. \chardef\i="10 \chardef\j="11 % dotless letters
  663. \def\aa{\accent23a}
  664. \def\l{\char32l}
  665. \def\L{\leavevmode\setbox0\hbox{L}\hbox to\wd0{\hss\char32L}}
  666.  
  667. \def\leavevmode{\unhbox\voidb@x} % begins a paragraph, if necessary
  668. \def\_{\leavevmode \kern.06em \vbox{\hrule width.3em}}
  669. \def\AA{\leavevmode\setbox0\hbox{h}\dimen@\ht0\advance\dimen@-1ex%
  670.   \rlap{\raise.67\dimen@\hbox{\char'27}}A}
  671.  
  672. \def\mathhexbox#1#2#3{\leavevmode
  673.   \hbox{$\m@th \mathchar"#1#2#3$}}
  674. \def\dag{\mathhexbox279}
  675. \def\ddag{\mathhexbox27A}
  676. \def\S{\mathhexbox278}
  677. \def\P{\mathhexbox27B}
  678.  
  679. \def\oalign#1{\leavevmode\vtop{\baselineskip\z@skip \lineskip.25ex%
  680.   \ialign{##\crcr#1\crcr}}} % put characters over each other
  681. \def\ooalign{\lineskiplimit-\maxdimen \oalign}
  682. \def\d#1{\oalign{#1\crcr\hidewidth.\hidewidth}}
  683. \def\b#1{\oalign{#1\crcr\hidewidth
  684.     \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}
  685. \def\c#1{\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent24 #1%
  686.   \else{\ooalign{\hidewidth\char24\hidewidth\crcr\unhbox\z@}}\fi}
  687. \def\copyright{{\ooalign{\hfil\raise.07ex\hbox{c}\hfil\crcr\mathhexbox20D}}}
  688.  
  689. \def\dots{\relax\ifmmode\ldots\else$\m@th\ldots\,$\fi}
  690. \def\TeX{\protect\@TeX}
  691. \def\@TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX}
  692.  
  693. \def\`#1{{\accent18 #1}}
  694. \def\'#1{{\accent19 #1}}
  695. \def\v#1{{\accent20 #1}} \let\^^_=\v
  696. \def\u#1{{\accent21 #1}} \let\^^S=\u
  697. \def\=#1{{\accent22 #1}}
  698. \def\^#1{{\accent94 #1}} \let\^^D=\^
  699. \def\.#1{{\accent95 #1}}
  700. \def\H#1{{\accent"7D #1}}
  701. \def\~#1{{\accent"7E #1}}
  702. \def\"#1{{\accent"7F #1}}
  703. \def\t#1{{\edef\next{\the\font}\the\textfont1\accent"7F\next#1}}
  704.  
  705. \def\hrulefill{\leaders\hrule\hfill}
  706. \def\dotfill{\cleaders\hbox{$\m@th \mkern1.5mu.\mkern1.5mu$}\hfill}
  707. \def\rightarrowfill{$\m@th\mathord-\mkern-6mu%
  708.   \cleaders\hbox{$\mkern-2mu\mathord-\mkern-2mu$}\hfill
  709.   \mkern-6mu\mathord\rightarrow$}
  710. \def\leftarrowfill{$\m@th\mathord\leftarrow\mkern-6mu%
  711.   \cleaders\hbox{$\mkern-2mu\mathord-\mkern-2mu$}\hfill
  712.   \mkern-6mu\mathord-$}
  713. \mathchardef\braceld="37A \mathchardef\bracerd="37B
  714. \mathchardef\bracelu="37C \mathchardef\braceru="37D
  715. \def\downbracefill{$\m@th\braceld\leaders\vrule\hfill\braceru
  716.   \bracelu\leaders\vrule\hfill\bracerd$}
  717. \def\upbracefill{$\m@th\bracelu\leaders\vrule\hfill\bracerd
  718.   \braceld\leaders\vrule\hfill\braceru$}
  719.  
  720. %\outer\def\bye{\par\vfill\supereject\end}
  721.  
  722. % Macros for math setting
  723.  
  724. \let\sp=^ \let\sb=_
  725. \def\,{\mskip\thinmuskip}
  726. \def\>{\mskip\medmuskip}
  727. \def\;{\mskip\thickmuskip}
  728. \def\!{\mskip-\thinmuskip}
  729. \def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}}
  730. {\catcode`\'=\active \gdef'{^\bgroup\prim@s}}
  731. \def\prim@s{\prime\futurelet\next\pr@m@s}
  732. \def\pr@m@s{\ifx'\next\let\next\pr@@@s \else\ifx^\next\let\next\pr@@@t
  733.   \else\let\next\egroup\fi\fi \next}
  734. \def\pr@@@s#1{\prim@s} \def\pr@@@t#1#2{#2\egroup}
  735. {\catcode`\^^Z=\active \gdef^^Z{\not=}} % ^^Z is like \ne in math
  736. {\catcode`\_=\active \let_=\_} % _ is like \_ if not used for subscripts
  737.  
  738. \mathchardef\alpha="010B
  739. \mathchardef\beta="010C
  740. \mathchardef\gamma="010D
  741. \mathchardef\delta="010E
  742. \mathchardef\epsilon="010F
  743. \mathchardef\zeta="0110
  744. \mathchardef\eta="0111
  745. \mathchardef\theta="0112
  746. \mathchardef\iota="0113
  747. \mathchardef\kappa="0114
  748. \mathchardef\lambda="0115
  749. \mathchardef\mu="0116
  750. \mathchardef\nu="0117
  751. \mathchardef\xi="0118
  752. \mathchardef\pi="0119
  753. \mathchardef\rho="011A
  754. \mathchardef\sigma="011B
  755. \mathchardef\tau="011C
  756. \mathchardef\upsilon="011D
  757. \mathchardef\phi="011E
  758. \mathchardef\chi="011F
  759. \mathchardef\psi="0120
  760. \mathchardef\omega="0121
  761. \mathchardef\varepsilon="0122
  762. \mathchardef\vartheta="0123
  763. \mathchardef\varpi="0124
  764. \mathchardef\varrho="0125
  765. \mathchardef\varsigma="0126
  766. \mathchardef\varphi="0127
  767. \mathchardef\Gamma="7000
  768. \mathchardef\Delta="7001
  769. \mathchardef\Theta="7002
  770. \mathchardef\Lambda="7003
  771. \mathchardef\Xi="7004
  772. \mathchardef\Pi="7005
  773. \mathchardef\Sigma="7006
  774. \mathchardef\Upsilon="7007
  775. \mathchardef\Phi="7008
  776. \mathchardef\Psi="7009
  777. \mathchardef\Omega="700A
  778.  
  779. \mathchardef\aleph="0240
  780. \def\hbar{{\mathchar'26\mkern-9muh}}
  781. \mathchardef\imath="017B
  782. \mathchardef\jmath="017C
  783. \mathchardef\ell="0160
  784. \mathchardef\wp="017D
  785. \mathchardef\Re="023C
  786. \mathchardef\Im="023D
  787. \mathchardef\partial="0140
  788. \mathchardef\infty="0231
  789. \mathchardef\prime="0230
  790. \mathchardef\emptyset="023B
  791. \mathchardef\nabla="0272
  792. \def\surd{{\mathchar"1270}}
  793. \mathchardef\top="023E
  794. \mathchardef\bot="023F
  795. \def\angle{{\vbox{\ialign{$\m@th\scriptstyle##$\crcr
  796.       \not\mathrel{\mkern14mu}\crcr
  797.       \noalign{\nointerlineskip}
  798.       \mkern2.5mu\leaders\hrule height.34pt\hfill\mkern2.5mu\crcr}}}}
  799. \mathchardef\triangle="0234
  800. \mathchardef\forall="0238
  801. \mathchardef\exists="0239
  802. \mathchardef\neg="023A \let\lnot=\neg
  803. \mathchardef\flat="015B
  804. \mathchardef\natural="015C
  805. \mathchardef\sharp="015D
  806. \mathchardef\clubsuit="027C
  807. \mathchardef\diamondsuit="027D
  808. \mathchardef\heartsuit="027E
  809. \mathchardef\spadesuit="027F
  810.  
  811. \mathchardef\coprod="1360
  812. \mathchardef\bigvee="1357
  813. \mathchardef\bigwedge="1356
  814. \mathchardef\biguplus="1355
  815. \mathchardef\bigcap="1354
  816. \mathchardef\bigcup="1353
  817. \mathchardef\intop="1352 \def\int{\intop\nolimits}
  818. \mathchardef\prod="1351
  819. \mathchardef\sum="1350
  820. \mathchardef\bigotimes="134E
  821. \mathchardef\bigoplus="134C
  822. \mathchardef\bigodot="134A
  823. \mathchardef\ointop="1348 \def\oint{\ointop\nolimits}
  824. \mathchardef\bigsqcup="1346
  825. \mathchardef\smallint="1273
  826.  
  827. \mathchardef\triangleleft="212F
  828. \mathchardef\triangleright="212E
  829. \mathchardef\bigtriangleup="2234
  830. \mathchardef\bigtriangledown="2235
  831. \mathchardef\wedge="225E \let\land=\wedge
  832. \mathchardef\vee="225F \let\lor=\vee
  833. \mathchardef\cap="225C
  834. \mathchardef\cup="225B
  835. \mathchardef\ddagger="227A
  836. \mathchardef\dagger="2279
  837. \mathchardef\sqcap="2275
  838. \mathchardef\sqcup="2274
  839. \mathchardef\uplus="225D
  840. \mathchardef\amalg="2271
  841. \mathchardef\diamond="2205
  842. \mathchardef\bullet="220F
  843. \mathchardef\wr="226F
  844. \mathchardef\div="2204
  845. \mathchardef\odot="220C
  846. \mathchardef\oslash="220B
  847. \mathchardef\otimes="220A
  848. \mathchardef\ominus="2209
  849. \mathchardef\oplus="2208
  850. \mathchardef\mp="2207
  851. \mathchardef\pm="2206
  852. \mathchardef\circ="220E
  853. \mathchardef\bigcirc="220D
  854. \mathchardef\setminus="226E % for set difference A\setminus B
  855. \mathchardef\cdot="2201
  856. \mathchardef\ast="2203
  857. \mathchardef\times="2202
  858. \mathchardef\star="213F
  859.  
  860. \mathchardef\propto="322F
  861. \mathchardef\sqsubseteq="3276
  862. \mathchardef\sqsupseteq="3277
  863. \mathchardef\parallel="326B
  864. \mathchardef\mid="326A
  865. \mathchardef\dashv="3261
  866. \mathchardef\vdash="3260
  867. \mathchardef\nearrow="3225
  868. \mathchardef\searrow="3226
  869. \mathchardef\nwarrow="322D
  870. \mathchardef\swarrow="322E
  871. \mathchardef\Leftrightarrow="322C
  872. \mathchardef\Leftarrow="3228
  873. \mathchardef\Rightarrow="3229
  874. \def\neq{\not=} \let\ne=\neq
  875. \mathchardef\leq="3214 \let\le=\leq
  876. \mathchardef\geq="3215 \let\ge=\geq
  877. \mathchardef\succ="321F
  878. \mathchardef\prec="321E
  879. \mathchardef\approx="3219
  880. \mathchardef\succeq="3217
  881. \mathchardef\preceq="3216
  882. \mathchardef\supset="321B
  883. \mathchardef\subset="321A
  884. \mathchardef\supseteq="3213
  885. \mathchardef\subseteq="3212
  886. \mathchardef\in="3232
  887. \mathchardef\ni="3233 \let\owns=\ni
  888. \mathchardef\gg="321D
  889. \mathchardef\ll="321C
  890. \mathchardef\not="3236
  891. \mathchardef\leftrightarrow="3224
  892. \mathchardef\leftarrow="3220 \let\gets=\leftarrow
  893. \mathchardef\rightarrow="3221 \let\to=\rightarrow
  894. \mathchardef\mapstochar="3237 \def\mapsto{\mapstochar\rightarrow}
  895. \mathchardef\sim="3218
  896. \mathchardef\simeq="3227
  897. \mathchardef\perp="323F
  898. \mathchardef\equiv="3211
  899. \mathchardef\asymp="3210
  900. \mathchardef\smile="315E
  901. \mathchardef\frown="315F
  902. \mathchardef\leftharpoonup="3128
  903. \mathchardef\leftharpoondown="3129
  904. \mathchardef\rightharpoonup="312A
  905. \mathchardef\rightharpoondown="312B
  906.  
  907. \def\joinrel{\mathrel{\mkern-3mu}}
  908. \def\relbar{\mathrel{\smash-}} % \smash, because - has the same height as +
  909. \def\Relbar{\mathrel=}
  910. \mathchardef\lhook="312C \def\hookrightarrow{\lhook\joinrel\rightarrow}
  911. \mathchardef\rhook="312D \def\hookleftarrow{\leftarrow\joinrel\rhook}
  912. \def\bowtie{\mathrel\triangleright\joinrel\mathrel\triangleleft}
  913. \def\models{\mathrel|\joinrel=}
  914. \def\Longrightarrow{\Relbar\joinrel\Rightarrow}
  915. \def\longrightarrow{\relbar\joinrel\rightarrow}
  916. \def\longleftarrow{\leftarrow\joinrel\relbar}
  917. \def\Longleftarrow{\Leftarrow\joinrel\Relbar}
  918. \def\longmapsto{\mapstochar\longrightarrow}
  919. \def\longleftrightarrow{\leftarrow\joinrel\rightarrow}
  920. \def\Longleftrightarrow{\Leftarrow\joinrel\Rightarrow}
  921. \def\iff{\;\Longleftrightarrow\;}
  922.  
  923. \mathchardef\ldotp="613A % ldot as a punctuation mark
  924. \mathchardef\cdotp="6201 % cdot as a punctuation mark
  925. \mathchardef\colon="603A % colon as a punctuation mark
  926. \def\ldots{\mathinner{\ldotp\ldotp\ldotp}}
  927. \def\cdots{\mathinner{\cdotp\cdotp\cdotp}}
  928. \def\vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@
  929.     \kern6\p@\hbox{.}\hbox{.}\hbox{.}}}
  930. \def\ddots{\mathinner{\mkern1mu\raise7\p@\vbox{\kern7\p@\hbox{.}}\mkern2mu
  931.     \raise4\p@\hbox{.}\mkern2mu\raise\p@\hbox{.}\mkern1mu}}
  932.  
  933. \def\acute{\mathaccent"7013 }
  934. \def\grave{\mathaccent"7012 }
  935. \def\ddot{\mathaccent"707F }
  936. \def\tilde{\mathaccent"707E }
  937. \def\bar{\mathaccent"7016 }
  938. \def\breve{\mathaccent"7015 }
  939. \def\check{\mathaccent"7014 }
  940. \def\hat{\mathaccent"705E }
  941. \def\vec{\mathaccent"017E }
  942. \def\dot{\mathaccent"705F }
  943. \def\widetilde{\mathaccent"0365 }
  944. \def\widehat{\mathaccent"0362 }
  945. \def\overrightarrow#1{\vbox{\ialign{##\crcr
  946.       \rightarrowfill\crcr\noalign{\kern-\p@\nointerlineskip}
  947.       $\hfil\displaystyle{#1}\hfil$\crcr}}}
  948. \def\overleftarrow#1{\vbox{\ialign{##\crcr
  949.       \leftarrowfill\crcr\noalign{\kern-\p@\nointerlineskip}
  950.       $\hfil\displaystyle{#1}\hfil$\crcr}}}
  951. \def\overbrace#1{\mathop{\vbox{\ialign{##\crcr\noalign{\kern3\p@}
  952.       \downbracefill\crcr\noalign{\kern3\p@\nointerlineskip}
  953.       $\hfil\displaystyle{#1}\hfil$\crcr}}}\limits}
  954. \def\underbrace#1{\mathop{\vtop{\ialign{##\crcr
  955.       $\hfil\displaystyle{#1}\hfil$\crcr\noalign{\kern3\p@\nointerlineskip}
  956.       \upbracefill\crcr\noalign{\kern3\p@}}}}\limits}
  957. \def\skew#1#2#3{{#2{#3\mkern#1mu}\mkern-#1mu}{}}
  958.  
  959. \def\lmoustache{\delimiter"4000340 } % top from (, bottom from )
  960. \def\rmoustache{\delimiter"5000341 } % top from ), bottom from (
  961. \def\lgroup{\delimiter"400033A } % extensible ( with sharper tips
  962. \def\rgroup{\delimiter"500033B } % extensible ) with sharper tips
  963. \def\arrowvert{\delimiter"33C000 } % arrow without arrowheads
  964. \def\Arrowvert{\delimiter"33D000 } % double arrow without arrowheads
  965. \def\bracevert{\delimiter"33E000 } % the vertical bar that extends braces
  966. \def\Vert{\delimiter"26B30D } \let\|=\Vert
  967. \def\vert{\delimiter"26A30C }
  968. \def\uparrow{\delimiter"3222378 }
  969. \def\downarrow{\delimiter"3223379 }
  970. \def\updownarrow{\delimiter"326C33F }
  971. \def\Uparrow{\delimiter"322A37E }
  972. \def\Downarrow{\delimiter"322B37F }
  973. \def\Updownarrow{\delimiter"326D377 }
  974. \def\backslash{\delimiter"26E30F } % for double coset G\backslash H
  975. \def\rangle{\delimiter"526930B }
  976. \def\langle{\delimiter"426830A }
  977. \def\rbrace{\delimiter"5267309 } \let\}=\rbrace
  978. \def\lbrace{\delimiter"4266308 } \let\{=\lbrace
  979. \def\rceil{\delimiter"5265307 }
  980. \def\lceil{\delimiter"4264306 }
  981. \def\rfloor{\delimiter"5263305 }
  982. \def\lfloor{\delimiter"4262304 }
  983.  
  984. \def\bigl{\mathopen\big}
  985. \def\bigm{\mathrel\big}
  986. \def\bigr{\mathclose\big}
  987. \def\Bigl{\mathopen\Big}
  988. \def\Bigm{\mathrel\Big}
  989. \def\Bigr{\mathclose\Big}
  990. \def\biggl{\mathopen\bigg}
  991. \def\biggm{\mathrel\bigg}
  992. \def\biggr{\mathclose\bigg}
  993. \def\Biggl{\mathopen\Bigg}
  994. \def\Biggm{\mathrel\Bigg}
  995. \def\Biggr{\mathclose\Bigg}
  996. \def\big#1{{\hbox{$\left#1\vbox to8.5\p@{}\right.\n@space$}}}
  997. \def\Big#1{{\hbox{$\left#1\vbox to11.5\p@{}\right.\n@space$}}}
  998. \def\bigg#1{{\hbox{$\left#1\vbox to14.5\p@{}\right.\n@space$}}}
  999. \def\Bigg#1{{\hbox{$\left#1\vbox to17.5\p@{}\right.\n@space$}}}
  1000. \def\n@space{\nulldelimiterspace\z@ \m@th}
  1001.  
  1002. \def\choose{\atopwithdelims()}
  1003. \def\brack{\atopwithdelims[]}
  1004. \def\brace{\atopwithdelims\{\}}
  1005.  
  1006. \def\sqrt{\radical"270370 }
  1007.  
  1008. \def\mathpalette#1#2{\mathchoice{#1\displaystyle{#2}}%
  1009.   {#1\textstyle{#2}}{#1\scriptstyle{#2}}{#1\scriptscriptstyle{#2}}}
  1010. \newbox\rootbox
  1011. \def\root#1\of{\setbox\rootbox\hbox{$\m@th\scriptscriptstyle{#1}$}
  1012.   \mathpalette\r@@t}
  1013. \def\r@@t#1#2{\setbox\z@\hbox{$\m@th#1\sqrt{#2}$}
  1014.   \dimen@\ht\z@ \advance\dimen@-\dp\z@
  1015.   \mkern5mu\raise.6\dimen@\copy\rootbox \mkern-10mu \box\z@}
  1016. \newif\ifv@ \newif\ifh@
  1017. %% LP
  1018. \let\v@true=\v@yes \let\v@false=\v@no 
  1019. \let\h@true=\h@yes \let\h@false=\h@no
  1020. \def\vphantom{\v@true\h@false\ph@nt}
  1021. \def\hphantom{\v@false\h@true\ph@nt}
  1022. \def\phantom{\v@true\h@true\ph@nt}
  1023. \def\ph@nt{\ifmmode\def\next{\mathpalette\mathph@nt}%
  1024.   \else\let\next\makeph@nt\fi\next}
  1025. \def\makeph@nt#1{\setbox\z@\hbox{#1}\finph@nt}
  1026. \def\mathph@nt#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finph@nt}
  1027. \def\finph@nt{\setbox\tw@\null
  1028.   \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi
  1029.   \ifh@ \wd\tw@\wd\z@\fi \box\tw@}
  1030. \def\mathstrut{\vphantom(}
  1031. \def\smash{\relax % \relax, in case this comes first in \halign
  1032.   \ifmmode\def\next{\mathpalette\mathsm@sh}\else\let\next\makesm@sh
  1033.   \fi\next}
  1034. \def\makesm@sh#1{\setbox\z@\hbox{#1}\finsm@sh}
  1035. \def\mathsm@sh#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finsm@sh}
  1036. \def\finsm@sh{\ht\z@\z@ \dp\z@\z@ \box\z@}
  1037.  
  1038. \def\cong{\mathrel{\mathpalette\@vereq\sim}} % congruence sign
  1039. \def\@vereq#1#2{\lower.5\p@\vbox{\baselineskip\z@skip\lineskip-.5\p@
  1040.     \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr=\crcr}}}
  1041. \def\notin{\mathrel{\mathpalette\c@ncel\in}}
  1042. \def\c@ncel#1#2{\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}}
  1043. \def\rightleftharpoons{\mathrel{\mathpalette\rlh@{}}}
  1044. \def\rlh@#1{\vcenter{\hbox{\ooalign{\raise2pt
  1045.           \hbox{$#1\rightharpoonup$}\crcr
  1046.         $#1\leftharpoondown$}}}}
  1047. \def\buildrel#1\over#2{\mathrel{\mathop{\kern\z@#2}\limits^{#1}}}
  1048. \def\doteq{\buildrel\textstyle.\over=}
  1049.  
  1050. \def\log{\mathop{\roman log}\nolimits}
  1051. \def\lg{\mathop{\roman lg}\nolimits}
  1052. \def\ln{\mathop{\roman ln}\nolimits}
  1053. \def\lim{\mathop{\roman lim}}
  1054. \def\limsup{\mathop{\roman lim\,sup}}
  1055. \def\liminf{\mathop{\roman lim\,inf}}
  1056. \def\sin{\mathop{\roman sin}\nolimits}
  1057. \def\arcsin{\mathop{\roman arcsin}\nolimits}
  1058. \def\sinh{\mathop{\roman sinh}\nolimits}
  1059. \def\cos{\mathop{\roman cos}\nolimits}
  1060. \def\arccos{\mathop{\roman arccos}\nolimits}
  1061. \def\cosh{\mathop{\roman cosh}\nolimits}
  1062. \def\tan{\mathop{\roman tan}\nolimits}
  1063. \def\arctan{\mathop{\roman arctan}\nolimits}
  1064. \def\tanh{\mathop{\roman tanh}\nolimits}
  1065. \def\cot{\mathop{\roman cot}\nolimits}
  1066. \def\coth{\mathop{\roman coth}\nolimits}
  1067. \def\sec{\mathop{\roman sec}\nolimits}
  1068. \def\csc{\mathop{\roman csc}\nolimits}
  1069. \def\max{\mathop{\roman max}}
  1070. \def\min{\mathop{\roman min}}
  1071. \def\sup{\mathop{\roman sup}}
  1072. \def\inf{\mathop{\roman inf}}
  1073. \def\arg{\mathop{\roman arg}\nolimits}
  1074. \def\ker{\mathop{\roman ker}\nolimits}
  1075. \def\dim{\mathop{\roman dim}\nolimits}
  1076. \def\hom{\mathop{\roman hom}\nolimits}
  1077. \def\det{\mathop{\roman det}}
  1078. \def\exp{\mathop{\roman exp}\nolimits}
  1079. \def\Pr{\mathop{\roman Pr}}
  1080. \def\gcd{\mathop{\roman gcd}}
  1081. \def\deg{\mathop{\roman deg}\nolimits}
  1082.  
  1083. \def\bmod{\mskip-\medmuskip\mkern5mu
  1084.   \mathbin{\roman mod}\penalty900\mkern5mu\mskip-\medmuskip}
  1085. \def\pmod#1{\allowbreak\mkern18mu({\roman mod}\,\,#1)}
  1086.  
  1087. \def\cases#1{\left\{\,\vcenter{\normalbaselines\m@th
  1088.     \ialign{$##\hfil$&\quad##\hfil\crcr#1\crcr}}\right.}
  1089. \def\matrix#1{\null\,\vcenter{\normalbaselines\m@th
  1090.     \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr
  1091.       \mathstrut\crcr\noalign{\kern-\baselineskip}
  1092.       #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,}
  1093. \def\pmatrix#1{\left(\matrix{#1}\right)}
  1094. \newdimen\p@renwd
  1095. \setbox0=\hbox{\tenex B} \p@renwd=\wd0 % width of the big left (
  1096. \def\bordermatrix#1{\begingroup \m@th
  1097.   \setbox\z@\vbox{\def\cr{\crcr\noalign{\kern2\p@\global\let\cr\endline}}%
  1098.     \ialign{$##$\hfil\kern2\p@\kern\p@renwd&\thinspace\hfil$##$\hfil
  1099.       &&\quad\hfil$##$\hfil\crcr
  1100.       \omit\strut\hfil\crcr\noalign{\kern-\baselineskip}%
  1101.       #1\crcr\omit\strut\cr}}%
  1102.   \setbox\tw@\vbox{\unvcopy\z@\global\setbox\@ne\lastbox}%
  1103.   \setbox\tw@\hbox{\unhbox\@ne\unskip\global\setbox\@ne\lastbox}%
  1104.   \setbox\tw@\hbox{$\kern\wd\@ne\kern-\p@renwd\left(\kern-\wd\@ne
  1105.     \global\setbox\@ne\vbox{\box\@ne\kern2\p@}%
  1106.     \vcenter{\kern-\ht\@ne\unvbox\z@\kern-\baselineskip}\,\right)$}%
  1107.   \null\;\vbox{\kern\ht\@ne\box\tw@}\endgroup}
  1108.  
  1109. \def\openup{\afterassignment\@penup\dimen@=}
  1110. \def\@penup{\advance\lineskip\dimen@
  1111.   \advance\baselineskip\dimen@
  1112.   \advance\lineskiplimit\dimen@}
  1113. \def\eqalign#1{\null\,\vcenter{\openup\jot\m@th
  1114.   \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil
  1115.       \crcr#1\crcr}}\,}
  1116. \newif\ifdt@p 
  1117. \let\dt@ptrue=\dt@pyes \let\dt@pfalse=\dt@pno %%LP
  1118. \def\displ@y{\global\dt@ptrue\openup\jot\m@th
  1119.   \everycr{\noalign{\ifdt@p \global\dt@pfalse
  1120.       \vskip-\lineskiplimit \vskip\normallineskiplimit
  1121.       \else \penalty\interdisplaylinepenalty \fi}}}
  1122. \def\@lign{\tabskip\z@skip\everycr{}} % restore inside \displ@y
  1123. \def\displaylines#1{\displ@y
  1124.   \halign{\hbox to\displaywidth{$\@lign\hfil\displaystyle##\hfil$}\crcr
  1125.     #1\crcr}}
  1126. \def\eqalignno#1{\displ@y \tabskip\centering
  1127.   \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip\z@skip
  1128.     &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering
  1129.     &\llap{$\@lign##$}\tabskip\z@skip\crcr
  1130.     #1\crcr}}
  1131. \def\leqalignno#1{\displ@y \tabskip\centering
  1132.   \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip\z@skip
  1133.     &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering
  1134.     &\kern-\displaywidth\rlap{$\@lign##$}\tabskip\displaywidth\crcr
  1135.     #1\crcr}}
  1136.  
  1137. % Definitions related to output
  1138.  
  1139. %LP Voorlopig even laten staat voor een default output routine
  1140.  
  1141. \countdef\pageno=0 \pageno=1 % first page is number 1
  1142.  
  1143. \def\textindent#1{\indent\llap{#1\enspace}\ignorespaces}
  1144. \newinsert\footins
  1145. \def\footnote#1{\let\@sf\empty % parameter #2 (the text) is read later
  1146.   \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
  1147.   #1\@sf\vfootnote{#1}}
  1148. \def\vfootnote#1{\insert\footins\bgroup
  1149.   \interlinepenalty\interfootnotelinepenalty
  1150.   \splittopskip\ht\strutbox % top baseline for broken footnotes
  1151.   \splitmaxdepth\dp\strutbox \floatingpenalty\@MM
  1152.   \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip
  1153.   \textindent{#1}\footstrut\futurelet\next\fo@t}
  1154. \def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t
  1155.   \else\let\next\f@t\fi \next}
  1156. \def\f@@t{\bgroup\aftergroup\@foot\let\next}
  1157. \def\f@t#1{#1\@foot}
  1158. \def\@foot{\strut\egroup}
  1159. \def\footstrut{\vbox to\splittopskip{}}
  1160. \skip\footins=\bigskipamount % space added when footnote is present
  1161. \count\footins=1000 % footnote magnification factor (1 to 1)
  1162. \dimen\footins=8in % maximum footnotes per page
  1163.  
  1164. \newinsert\topins
  1165. \newif\ifp@ge \newif\if@mid
  1166. \let\p@getrue=\p@geyes \let\p@gefalse=\p@geno
  1167. \let\@midtrue=\@midyes \let\@midfalse=\@midno
  1168. \def\topinsert{\@midfalse\p@gefalse\@ins}
  1169. \def\midinsert{\@midtrue\@ins}
  1170. \def\pageinsert{\@midfalse\p@getrue\@ins}
  1171. \skip\topins=\z@skip % no space added when a topinsert is present
  1172. \count\topins=1000 % magnification factor (1 to 1)
  1173. \dimen\topins=\maxdimen % no limit per page
  1174. \def\@ins{\par\begingroup\setbox\z@\vbox\bgroup} % start a \vbox
  1175. \def\endinsert{\egroup % finish the \vbox
  1176.   \if@mid \dimen@\ht\z@ \advance\dimen@\dp\z@
  1177.     \advance\dimen@12\p@ \advance\dimen@\pagetotal
  1178.     \ifdim\dimen@>\pagegoal\@midfalse\p@gefalse\fi\fi
  1179.   \if@mid \bigskip\box\z@\bigbreak
  1180.   \else\insert\topins{\penalty100 % floating insertion
  1181.     \splittopskip\z@skip
  1182.     \splitmaxdepth\maxdimen \floatingpenalty\z@
  1183.     \ifp@ge \dimen@\dp\z@
  1184.     \vbox to\vsize{\unvbox\z@\kern-\dimen@}% depth is zero
  1185.     \else \box\z@\nobreak\bigskip\fi}\fi\endgroup}
  1186.  
  1187. % Hyphenation, miscellaneous macros, and initial values for standard layout
  1188.  
  1189. \lefthyphenmin=2 \righthyphenmin=3 % disallow x- or -xx breaks
  1190. \input hyphen
  1191.  
  1192. \def\magnification{\afterassignment\m@g\count@}
  1193. \def\m@g{\mag\count@
  1194.   \hsize6.5truein\vsize8.9truein\dimen\footins8truein}
  1195.  
  1196. \def\tracingall{\tracingonline\@ne\tracingcommands\tw@\tracingstats\tw@
  1197.   \tracingpages\@ne\tracingoutput\@ne\tracinglostchars\@ne
  1198.   \tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne
  1199.   \showboxbreadth\maxdimen\showboxdepth\maxdimen\errorstopmode}
  1200.  
  1201. \font\tenrm=cmr10 % aw hell.
  1202. \def\showhyphens#1{\setbox0\vbox{\parfillskip\z@skip\hsize\maxdimen\tenrm
  1203.   \pretolerance\m@ne\tolerance\m@ne\hbadness0\showboxdepth0\ #1}}
  1204.  
  1205. \endinput
  1206.  
  1207. %92/11/03 brought up to date with plain.tex for 3.0
  1208.